package collection;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 队列
 * 队列可以保存一组元素，但是存取元素必须遵循先进先出原则
 * java.util.Queue接口，是队列接口
 * Queue继承自Collection，常用实现类：java.util.LinkedList
 */
public class QueueDemo {
    public static void main(String[] args) {
        /*
        由于LinkedList内部是由链表实现的，而链表结构首尾增删元素性能好，因此java让LinkedList作为了Queue的实现类使用
         */
        Queue<String> queue = new LinkedList<>();
        //offer:入队操作，将元素添加到队列末尾
        queue.offer("one");
        queue.offer("two");
        queue.offer("three");
        queue.offer("four");
        queue.offer("five");
        System.out.println(queue);//[one, two, three, four, five]

        //poll:出队操作，取出队列第一个元素
        String str = queue.poll();
        System.out.println(str);//one
        System.out.println(queue);//[two, three, four, five]

        //peek:引用队首元素，不影响队列
        str = queue.peek();
        System.out.println(str);//two
        System.out.println(queue);//[two, three, four, five]

        System.out.println("size:"+queue.size());//size:4
        for(String s:queue){//迭代器遍历队列时获取每一个元素时，不会影响队列中的元素
            System.out.println(s);
        }
        System.out.println(queue);//[two, three, four, five]

//        for(int i=0;i<queue.size();i++){//因为queue每一次循环都会减少一个元素，size也随之减小，所以循环两次
//            str = queue.poll();
//            System.out.println(str);
//        }
//        System.out.println(queue);//[four, five]
        while(queue.size()>0){
            str = queue.poll();
            System.out.println(str);
        }
        System.out.println(queue);
    }
}
